#include"Shm.hpp"
#include"Fifo.hpp"

int main()
{
    // //获取共享内存 ----> 映射到自己的地址空间
    // //创建共享内存的对象
    // Shm shm;
    // //获取共享内存
    // shm.Get();
    // sleep(5);
    // //映射到自己的地址空间
    // shm.Attach();
    // sleep(5);
    // shm.VirtualAddr();  

// -----------------  代码优化前后分隔线  -------------------
    // NamedFifo fifo("/",FILENAME);           client端不需要创建管道，只需要文件操作
    FileOper writerfile(PATH,FILENAME);       //文件操作
    writerfile.OpenForWrite();

    Shm shm(pathname,projid,USER);
    char *mem = (char*)shm.VirtualAddr();
    // shm.size();       //想进行操作的时候   就直接获取最开始虚拟地址和虚拟地址大小
    int index = 0;    //
    for(char c = 'A';c<='Z';c++,index+=2)
    {
    //向共享内存写入
        sleep(1);    //一秒向共享内存中写一个ab...字符       防止进去之后就立刻读取到了  
        mem[index] =c;    //c-'A'   分别依次对应的就是下标

        mem[index+1] =c;
        sleep(1);

        //保证
        mem[index + 2] = 0;   //字符串一定要以\0 作为结尾   保证完整字符串

        writerfile.Wakeup();    //写完再进行向管道中写   进行唤醒
    }

    //写完关闭
    writerfile.Close();

    return 0;
}
